package com.study.csc.controller;

import com.study.csc.config.FileConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.UUID;

/**
 * @author csc
 * @Date 2023/10/13 11:01
 * @PackageName:com.xyyl.csc.controller
 * @ClassName: FileController
 * @Description: TODO
 * @Version 1.0
 */

@RestController
public class FileController {

    @Autowired
    private FileConfig fileConfig;



    @PostMapping("/upload")  // 修正拼写
    public String upload(@RequestParam("file") MultipartFile file) {  // 显式指定参数名
        //获取文件上传地址
        String uploadFolder = fileConfig.getUploadFolder();

        File bendifeile = new File(uploadFolder);
        if(!bendifeile.exists()){//不存在
            bendifeile.mkdirs();
        }
        //生成新的文件名称，原因：防止文件名称一样后者上传的文件会覆盖前者上传的文件（前提是文件名称必须一样并且在用一个目录下）
        //生成新的文件名称，保证文件名称唯一有两种方法：
        // 	  1.通过UUID实现文件名称唯一 （UUID会生成32位字母+数字唯一的一个字符串）
        //	  2.通过时间戳现文件名称唯一  （时间戳是毫秒级时间 时间会一直往上加，生成13位数字）注意只有java生成13位 其他则是10位比如oracle、mysql、php
        //  获取时间戳
        //long currentTimeMillis = System.currentTimeMillis();
        //System.out.println(currentTimeMillis);
        String uuid = UUID.randomUUID().toString();
        String oldName = file.getOriginalFilename();//1.jpg
        String suffix = oldName.substring(oldName.lastIndexOf("."));
        String newFile = uuid+suffix;
        File file2 = new File(uploadFolder+"\\"+newFile);

        // 改进路径处理
        String filePath = Paths.get(uploadFolder, newFile).toString();

        try {
            file.transferTo(new File(filePath));
        } catch (IOException e) {
            e.printStackTrace();
            return "Upload failed: " + e.getMessage();
        }

        return fileConfig.getStaticStart() + "/" + newFile;
    }

}
